Centralized print job routing in a distributed printing environment

ABSTRACT

Methods, systems, and devices are described for centralized print job routing in a distributed printing environment. A data store may include a first table of identifiers for printers, a second table of identifiers for print servers, a third table of identifiers for drivers, and an association between identifiers of the first, second, and third tables. A print router may be configured to determine a printer selected for a print job. Based on the association between the identifiers of the first, second, and third tables, the print router may map a print server to the selected printer and a driver to the print server.

CROSS REFERENCES

The present application claims priority from U.S. Provisional PatentApplication Ser. No. 61/394,264, which is incorporated herein byreference in its entirety for all it discloses.

BACKGROUND

Embodiments of the invention relate to computer network communication,and more particularly, printing in a dynamic roaming environment.Organizations often use a variety of computing devices. Various computersystems may use a thin-client or a virtual desktop display inconjunction with a centralized server or mainframe, and also usetraditional workstations and handheld devices.

A thin-client may be a computing device that includes hardware,software, or both in a client-server architecture network. However, sucha network may use a central server for processing and may transmit andreceive input and output over a network or other communication mediumestablished between the device and the remote server. In some examples,a thin-client device may run web browsers or remote desktop software,such that significant processing may occur on the server.

Printing in such environments may present a number of significantchallenges. Traditionally, print drivers are stored and maintained oneach device, and this can cause administrative overhead and maintenanceissues. The problem may be exacerbated with mobile thin-clients andother mobile devices, as the number of drivers that may need to bestored can increase substantially as more printers become available.

There are also challenges related to selecting the right printer andprint server in a dynamic environment. For example, with a mobile deviceor a roaming user, it may be a challenge to identify the appropriateprinters because of the legacy architecture for printing networks. Also,because of the traditional ways printer networks communicate, feedbackfor print jobs and identifying available printers can presentchallenges, as well. Thus, there may be a need in the art for novelsystem architectures to address one or more of these issues.

SUMMARY

Methods, systems, and devices are described for centralized print jobrouting in a distributed printing environment.

In one set of embodiments, a distributed printing system includesmultiple print servers, a data store, and a print router. The data storemay include a first table of identifiers for printers, a second table ofidentifiers for print servers, and a third table of identifiers formultiple drivers. The data store may further store an associationbetween identifiers of the first, second, and third tables. The printrouter may determine a printer selected for a print job, map a firstidentifier for a print server to the identified printer, and map asecond identifier for a driver to the print server.

In another set of embodiments, a method of printing in a distributedenvironment includes determining a printer selected for a print job,mapping the selected printer to a print server in communication with theselected printer, and mapping a driver associated with the selectedprinter to the print server.

In another set of embodiments, a method of printing in a distributedenvironment includes storing multiple driver in a centralized datastore, receiving a print job over a network, and identifying a printerselected for the print job. The selected printer is mapped to a printserver in communication with the printer, and a driver in thecentralized data store is mapped to the print server. The print job isthen transmitted to the print server over the network.

BRIEF DESCRIPTION OF THE DRAWINGS

A further understanding of the nature and advantages of the presentinvention may be realized by reference to the following drawings. In theappended figures, similar components or features may have the samereference label. Further, various components of the same type may bedistinguished by following the reference label by a dash and a secondlabel that distinguishes among the similar components. If only the firstreference label is used in the specification, the description isapplicable to any one of the similar components having the same firstreference label irrespective of the second reference label.

FIG. 1 is a block diagram illustrating a system for distributed printingin a dynamic roaming and traditional static environments, according tovarious embodiments of the invention.

FIG. 2 is a block diagram illustrating a central server computer systemin a system for distributed printing in a dynamic roaming andtraditional static environments, according to various embodiments of theinvention.

FIG. 3 is a block diagram illustrating a data store in a system fordistributed printing in a dynamic roaming and traditional staticenvironments, according to various embodiments of the invention.

FIG. 4 is a block diagram illustrating a backend in a system fordistributed printing in a dynamic roaming and traditional staticenvironments, according to various embodiments of the invention.

FIG. 5 is a block diagram illustrating a logical path taken by printdata in a system for distributed printing in a dynamic roaming andtraditional static environments, according to various embodiments of theinvention.

FIG. 6 is a block diagram illustrating a system for centralized printjob routing in a distributed printing environment, according to variousembodiments of the invention.

FIG. 7 is a block diagram illustrating a system for centralized printjob routing in a distributed printing environment, according to variousembodiments of the invention.

FIGS. 8A, 8B, 8C, 8D, and 8E are diagrams illustrating tables which maybe stored in a centralized data store of a distributed printingenvironment, according to various embodiments of the invention.

FIG. 9 is a block diagram of a print router in a distributed printingenvironment, according to various embodiments of the invention.

FIG. 10 is a block diagram of a central server computer system in adistributed printing environment, according to various embodiments ofthe invention.

FIG. 11 is a flowchart diagram of an illustrative method of centralizedprint job routing in distributed printing environment, according tovarious embodiments of the invention.

FIG. 12 is a flowchart diagram of an illustrative method of centralizedprint job routing in distributed printing environment, according tovarious embodiments of the invention.

FIG. 13 is a flowchart diagram of an illustrative method of centralizedprint job routing in distributed printing environment, according tovarious embodiments of the invention.

FIG. 14 is a schematic diagram that illustrates a representative devicestructure that may be used in various embodiments of the presentinvention.

DETAILED DESCRIPTION OF THE INVENTION

The present description sets forth examples of systems, methods, anddevices for centralized print job routing in a distributed printingenvironment. In these systems, methods, and devices, identifiers for anumber of printers, print servers, and drivers may be stored in first,second, and third tables of a data store, respectively. When a printeris selected for a print job, a print router maps the printer to a printserver according to an association between an identifier for theselected printer and an identifier for the print server. The printrouter also maps the print server to a driver based on an associationbetween the identifier for the print server and an identifier for thedriver.

This description provides examples, and is not intended to limit thescope, applicability or configuration of the invention. Rather, theensuing description will provide those skilled in the art with anenabling description for implementing embodiments of the invention.Various changes may be made in the function and arrangement of elements.

Thus, various embodiments may omit, substitute, or add variousprocedures or components as appropriate. For instance, it should beappreciated that the methods may be performed in an order different thanthat described, and that various steps may be added, omitted orcombined. Also, aspects and elements described with respect to certainembodiments may be combined in various other embodiments. It should alsobe appreciated that the following systems, methods, devices, andsoftware may individually or collectively be components of a largersystem, wherein other procedures may take precedence over or otherwisemodify their application.

Systems, devices, methods, and software are described for centralizedprint job routing within a distributed printing environment. In one setof embodiments, shown in FIG. 1, system 100 includes a central servercomputer system 105, a data store 110, print servers 145, and printers150. Each of these components may be in communication with each other,directly or indirectly.

The central server computer system 105 may include a rules engine 130, asession manager 135, and a print router 140. The central server computersystem 105 may be made up of one or more server computers, workstations,web servers, or other suitable computing devices. The central servercomputer system 105 may be fully located within a single facility ordistributed geographically, in which case a network may be used tointegrate different components.

The central server computer system 105 may receive a print job. Theprint job may be received from a windows session 125. Alternatively, theprint job may be received from an application session 115 via a backend120. The print job may also or alternatively be received from anapplication session 115 via a cloud computing environment (notspecifically shown). The print job may be received from thin-clients(e.g., SUN RAY clients available from Oracle Corporation, WYSE clientsavailable from Wyse Technology, etc.), thick clients (e.g., desktops,laptops), mobile devices, tablets, etc., although these devices are notspecifically shown in the diagram Moreover, the print job may bereceived from any type of desktop or virtual desktop environment.Examples of suitable desktop environments from which the print job maybe received include, but are not limited to, LINUX environments based onthe open-source Linux kernel; WINDOWS environments based on softwareavailable from Microsoft, Inc.; OS/X environments based on softwareavailable from Apple, Inc.; VMWARE virtual environments based onsoftware available from VMware, Inc.; CITRIX virtual environments basedon software available from Citrix Systems, Inc.; Windows TerminalServices/Remote Desktop virtual environments based on software availablefrom Microsoft, Inc.; ANDROID environments based on software availablefrom Google, Inc.; IOS environments based on software available fromApple, Inc.; WEBOS environments based on software available from HewlettPackard Company; combinations thereof; and the like. In someembodiments, the central server computer system 105 may receive noticeor identification for a print job, and perform the functionalitydescribed herein based on such notice or identification only.

A set of drivers may be stored at data store 110. Data store 110 may bea single database, or may be made up of any number of separate anddistinct databases. The data store 110 may include one, or more,relational databases or components of relational databases (e.g.,tables), object databases, or components of object databases,spreadsheets, text files, internal software lists, or any other type ofdata structure suitable for storing data. Thus, it should be appreciatedthat a data store 110 may each be multiple data storages (of the same ordifferent type), or may share a common data storage with other datastores. Although in some embodiments the data store 110 may be distinctfrom a central server computer system 105, in other embodiments it maybe integrated therein to varying degrees.

As noted above, notification of a requested print job may be received atthe central server computer system 105. A session manager 135 mayreceive the notification, and may assign a terminal identifier (TID) toa device requesting the job. The central server computer system 105 mayidentify information about the print job (e.g., identification andlocation of the applicable print server 145 and printer 150, andidentification of the proper driver). Drivers for the print job may betransmitted to the appropriate print server 145 and to the client devicerequesting the job. The drivers may be installed, and the device andprint server 145 may execute the print job with the installed drivers.Thus, the central server computer system 105 may access the data store110 to distribute drivers to the print server 145 or the device, andthus in some embodiments the drivers do not need to be maintained oneach device or print server 145. The drivers may be taken down oruninstalled after each job, set of jobs, or period with no use.

In some embodiments, the central server computer system 105 may use theinformation about a print job to identify an appropriate operatingsystem (OS) and print driver for the print server for a given print job.The central server computer system 105 may access the data store 110 toretrieve the OS and print driver, and load an OS in real-time inresponse to receiving a print job. The central server computer system105 may install the appropriate driver, thus creating a virtual printserver (which may, but need not be, print server 145). The virtual printserver executes the print job. After the print job is complete, thedriver and OS may be taken down. In alternative embodiments, printservers may not be dynamically generated in response to individual printjobs or even at all. For example, the central server computer system 105may distribute incoming print jobs among a fixed set of physical orvirtual print servers 145.

It should be understood that the print servers 145 may be any real orvirtual machine or environment that hosts a print driver for controllinga printer 150. Thus, in certain examples a print server 145 may beimplemented by circuitry, logic, and/or software within the printer 150.Additionally or alternatively, a print server 145 may include a real orvirtual network server and/or a personal computing device incommunication with a printer 150.

In some embodiments, a printer 150 is selected (e.g., automatically orby a user). The print router 140 at the central server computer system105 may receive the selection. At the print router 140, the selectedprinter may be mapped to a 1) driver of a table of drivers, and 2) aprint server 145 of a table of print servers. In certain examples, thismapping may be performed based on static relationships between printers,drivers, and print servers. For example, these static relationships maybe stored as tables within the data store 110.

Additionally or alternatively, a rules engine 130 at the central servercomputer system 105 may be used in the selection of the printer. Therules engine 130 may be configured to dynamically map a print job to aprint server 145 and printer 150 for the print job. By way of example,upon notification or receipt of the print job, the rules engine 130 mayaccess a set of rules to determine the correct print server 145 andprinter 150 for the print job. The rules may dynamically make thisdetermination based on the location of the device. The type of device,attributes of the print job, and other factors may be used by the rulesengine 130 to determine the correct type and location for the printserver 145 and printer 150. This rules engine 130 functionality may notbe necessary in all embodiments of the invention to identify anappropriate printer 150, print server 145, or driver for a print job.Accordingly, the rules engine 130 may be eliminated from certainembodiments.

In some embodiments, feedback from a printer 150 is received at theprint server 145, and then forwarded on to a print router 140. The printrouter 140 may route the feedback (e.g., job failed, out of ink, out ofpaper, etc.) to the client device. This report may be in the form of adialogue box. The feedback may be routed to avoid the backend 120, evenwhen the print job is initially routed through the backend 120. Inresponse to feedback from a print router 140, a client device may director route a print job. This routing may be to a new printer, or may callup alternative functionality (e.g., a new tray) for a printer that isalready in use. Thus, instead of unidirectional printing, print jobs(e.g., sent through a backend 120) may be controlled by two-waycommunication between the print router 140 and the device.

The components of the system 100 may be directly connected, or may beconnected via a network (not shown), which may be any combination of thefollowing: the Internet, an IP network, an intranet, a wide-area network(“WAN”), a local-area network (“LAN”), a virtual private network, thePublic Switched Telephone Network (“PSTN”), or any other type of networksupporting data communication between devices described herein, indifferent embodiments. A network may include both wired and wirelessconnections, including optical links. Many other examples are possibleand apparent to those skilled in the art in light of this disclosure. Inthe discussion herein, a network may or may not be noted specifically.If no specific means of connection is noted, it may be assumed that thelink, communication, or other connection between devices may be via anetwork.

Session manager 135 may include an API architecture which serves as thecommunication control point, managing virtual desktop sessions andbrokering sessions for clients to backend 120 virtual desktop andapplication sessions. The session manager 135 may broker and passthrough mechanisms for client devices to active virtual sessions. Thecentral server computer system 105 may include a centralized managementconsole (not shown), which may be a web-based management console forconfiguration, real time monitoring, and reporting. There may bemanagement capabilities for the entire virtual desktop/applicationenvironment.

FIG. 2 shows a block diagram of a central server computer system 105-a.The central server computer system 105-a may be one example of thecentral server computer system 105 in FIG. 1. The central servercomputer system 105-a shown in FIG. 2 includes a rules engine 130, asession manager 135, a print router 140-a, and a print server manager205. The rules engine 130 and the session manager 135 shown in FIG. 2may be substantially the same as the rules engine 130 and the sessionmanager 135 shown in FIG. 1. The print router 140-a may be one exampleof the print router 140 shown in FIG. 1.

The print router 140-a may match print jobs received from externalsessions 115, 125 to one or more destination printers 150 and/or printservers 145. To accomplish these tasks, the print router 140-a mayinclude at least a print data receiving module 210, a print sourceidentification module 215, a print parameters identification module 220,a printer destination identification module 225, and a printer feedbackrouting module 230.

The print data receiving module 210 may be configured to receive printdata corresponding to a print job from an external session 115, 125 viaa communication channel established by the session manager 135. Incertain embodiments, the print data received from the external session115, 125 may be in the form of one or more page description languages(PDLs). Examples of page description languages that may be received atthe receiving module 210 include, but are not limited to, PostScript,Portable Document Format (PDF), Printer Command Language (PCL), ScalableVector Graphics (SVG), Open XML Paper Specification (XPS), and any otherpage description language that may suit a particular implementation ofthe principles described herein.

In other embodiments, the print data received from the external session115, 125 may be in the form of text or images for use with a standardtemplate stored by a print server 145 or a printer 150. For example, theprint data may be used to print a personalized bracelet worn by apatient in a medical facility. In this example, the print data mayinclude text corresponding to the name of the patient, and the name ofthe patient's doctor. This text, when received by a print server 145 ora printer 150, may be applied to a standard bracelet template to print abracelet having the name of the patient and the name of the patient'sdoctor.

In additional or alternative embodiments, the print data received by theprint data receiving module 210 may be in the form of an image that hasalready been rasterized by the external session 115, 125 in preparationfor delivery to a printer 150.

The print data receiving module 210 may be configured to cache thereceived print data at a designated storage area. In certain examples,the designated storage area may be in a data store 110. The cached printdata may be accessible to the rules engine 130 or any other module orprocess.

The print source identification module 215 may be configured to analyzethe received print data to determine certain attributes orcharacteristics of the received print data. These attributes orcharacteristics may also be stored for use by the other modules orprocesses. For example, the print source identification module 215 mayassociate the received print data with a format in the data store 110.This format information may be available to the rules engine 130 for usein enforcing one or more rule sets.

In certain examples, the print source identification module 215 mayanalyze the print data received by the print data receiving module 210to determine a source of the print data. By way of example, the sourcemay be determined using information from the session manager 135,information acquired by the print data receiving module 210, and/orinformation attached to the print data itself by the source. Once theprint source has been identified, the identity of the print source maybe associated with the received print data. For example, the identity ofthe print source may be stored in the data store 110.

The print parameters identification module 220 may identify certainprint parameters for the received print data. These print parameters maybe included with the received print data and/or determined by logicaldeduction (e.g., using the rules engine 130). For instance, a user of anexternal session 115, 125 may specify a particular print parameter whichmay be transmitted to the central server computer system 105-a with theprint data or logically deduced from the received print data.Additionally or alternatively, certain default print parameters may bedetermined for the print data based on the identity of the source of theprint data and/or another attribute associated with the print data.

Examples of print parameters that may be identified by the printparameters identification module 220 include, but are not limited to, aselected type of printing media, a selected size of printing media, aselected source of printing media, an ink or toner color setting, acollation setting, a staple setting, a duplex setting, a scalingsetting, combinations thereof, and the like.

The printer destination identification module 225 may be configured toidentify an appropriate destination printer 150 and/or print server 145for print data received at the print data receiving module 210. Theprinter destination identification module 225 may identify theappropriate destination printer 150 based on one or more attributes ofthe print data.

In certain examples, the printer destination identification module 225may pass certain attributes of the print data (e.g., the identity and/orlocation of the source of the print data determined by the print sourceidentification module 215, the print parameters determined by the printparameters identification module 220, etc.) to the rules engine 130. Therules engine 130 may apply a certain set of predetermined or dynamicallyupdated rules to the input it receives from the printer destinationidentification module 225 to determine the destination printer 150and/or print server 145 for the print data. The destination printer 150and/or print server 145 determined by the rules engine 130 may then bereturned to the printer destination identification module 225.

Alternatively, instead of using a rules engine 130, the printerdestination identification module 225 may identify the appropriatedestination printer 150 based on static associations between certainattributes and certain destination printers 150.

Once the destination printer 150 and/or print server 145 has beenidentified for the print data, the print data forwarding module 230 maybe configured to forward the print data on to the identified printer 150and/or print server 145. The print data may be forwarded over a localconnection and/or over a network or logical connection. Additionally, incertain examples, the print data forwarding module 230 may be configuredto receive feedback from a printer 150 and/or a print server 145 about aspecific print job and process the feedback and/or forward the feedbackto a third party, such as the source of that particular print job.

The print server manager 205 of the central server computer system 105-amay handle certain aspects related to the distribution of drivers forprinters to the print servers 145 and the general maintenance of theprint servers 145. Accordingly, the print server manager 205 may includea driver identification module 235, a driver deployment module 240, anoperating system identification module 245, and a print serverinstantiation module 250.

The driver identification module 235 may, in response to a set of printdata being assigned to a particular printer 150, determine anappropriate driver for that printer 150. As described above with regardto FIG. 1, the appropriate driver may be selected from a centralrepository of drivers stored, for example, at data store 110. The driveridentification module 235 may be further configured to determine whetheran appropriate driver for the selected printer 150 is already installedon a print server 145 chosen to send the print data to the selectedprinter 150. In certain examples, the driver identification module 235may compare a version of the driver stored by the chosen print server145 with a version of the driver stored at the central repository todetermine whether the driver stored by the chosen print server 145 iscurrent.

In the event that a determination is made that the chosen print server145 does not have the appropriate driver or a correct version of theappropriate driver, the driver deployment module 240 may install theappropriate driver on the print server 145. In certain examples, thedriver deployment module 240 may access and write to storage associatedwith the print server 145 via a local connection, network connection,and/or a logical connection to install the appropriate driver to theprint server 145.

The operating system identification module 245 may be configured toidentify an appropriate operating system associated with an appropriatedriver for the selected printer 150. In the event that a print server145 running the appropriate operating system and in communication withthe selected printer 150 does not exist or is unavailable, the printserver instantiation module 250 may instantiate a new print server 145.The newly instantiated print server 145 may be created on a dedicated orvirtual machine by loading the appropriate operating system to thededicated or virtual machine. In certain examples, an operating systemimage having the appropriate driver preinstalled may be used toinstantiate the new print server 145.

FIG. 3 is a block diagram of one example of a data store 110-a that maybe associated with a central server computer system 105. The data store110-a shown in FIG. 3 may be an example of data store 110 shown inFIG. 1. As shown in FIG. 3, data store 110-a may store drivers 305,libraries 310, device configurations 315, tables 320, rules 325, andoperating system images 330.

Data store 110-a may maintain a repository of drivers 305 for variousprinters 150 supported by a distributed printing system 100. Inaccordance with the description of FIGS. 1-2, as a print job is receivedat the central server computer system 105, the central server computersystem 105 may associate the print job with a specific printer 150,dynamically access the data store 110 to retrieve a driver 305appropriate for the specific printer, and provide the retrieved driver305 to a print server 145 associated with the specific printer.

Because the drivers 305 are stored centrally at data store 110-a,individual machines implementing sessions 115, 125 and individual printservers 145 need not store a local print driver for each printersupported by the system 100. Moreover, as updated versions of drivers305 become available, a network administrator may make the updatedversions available to each print server 145 in the system by simplyupdating the repository of drivers 305 stored at the data store 110-a,thereby avoiding the need to roll out driver updates to each printserver 145 separately.

The data store 110-a may also store software libraries 310. For example,the data store 110-a may store libraries 310 associated with the drivers305. In certain embodiments, the libraries 310 may include Dynamic-LinkLibrary (DLL) or Dynamic Shared Object (DSO) files that allow the printservers 145 to dynamically communicate with the sessions 115, 125 whichgenerate the print jobs sent to printers 150. Thus, where the centralserver computer system 105 provides a driver 305 to a print server 145for a specific printer 150, the central server computer system 105 mayinclude with the driver 305 one or more DLL files for that printer 150.The DLL(s) files may allow the print server 145 to provide feedback to asession 125 from which a print job originates in a way that isunderstandable to the session 125. For instance, if a user of thesession 125 generates the print job using a print Graphical UserInterface (GUI), the DLL transmitted to the print server 145 may allowthe print server 145 to provide feedback to the user of the session 125through the print GUI.

By way of example and not limitation, consider the case where a printjob generated by a session 125 has been sent to a print server 145 forprinting by a specific printer 150, and that the printer 150 is out ofpaper. The printer 150 may send a feedback message to the print server145 indicating that the printer 150 is out of paper, and the printserver 145 may provide this feedback message to a print dialog window inthe session 125 using a DLL received from the central server computersystem 105. This process may allow for a more seamless printingexperience for a user of session 125, despite the fact that the session125 may not locally store a print driver or DLL for communicating withthe printer 150.

In certain examples, the data store 110-a may also store deviceconfigurations 315, such as settings configurations for printers 150.Thus, when the central server computer system 105 transmits a print jobto a print server 145 associated with a specific printer 150, thecentral server computer system 105 may also include in the transmissiona configuration 315 retrieved from the data store 110-a for that printer150. The configuration 315 may specify, for example, settings such asprinter margin settings, duplex settings, paper tray settings, ink colorsettings, collation settings, and the like. The configuration 315transmitted to the print server 145 by the central server computersystem 105 may be specific to the printer 150, the session 115, 125generating the print job, and/or the character or content of the printjob itself.

Additionally, the data store 110-a may store and maintain various tables320. The tables 320 may reflect certain relationships present in thesystem 100. For example, the tables 320 may include one or more tables320 associating specific sessions 115, 125 with terminal identifiers ornode identifiers, one or more tables 320 associating specific sessions115, 125 with physical locations, one or more tables 320 associatingspecific printers 150 or print servers 145 with physical locations, oneor more tables 320 associating specific sessions 115, 125 with defaultprinters 150, and/or one or more tables 320 tracking any otherassociation in the system 100 that may suit a particular implementationof the principles described herein.

In certain examples, two or more of the tables 320 stored by the datastore 110-a may be interrelated in such a way that allows for logicaldeductions in routing print jobs to print servers 145 or other usefulpurposes. For instance, the data store 110-a may include: a) a firsttable 320 associating each terminal identifier at a port with aparticular session 115, 125 at a specific physical location; and b) asecond table 320 associating each physical location for a session 115,125 with a default printer 150. In this case, the information in thefirst table 320 and the second table 320 may be used by the centralserver computer system 105 to associate a print job received at a portwith a specific default printer 150.

The data store 110-a may also include one or more rules 325 for use bythe central server computer system 105 in routing received print jobs toprint servers 145 and printers 150. As noted above in the description ofFIGS. 1-2, the rules engine 130 of the central server computer system105 may be configured to dynamically map a print job to a print server145 and printer 150 for the print job by accessing the set of rules 325stored in the data store 110-a. The rules 325 may take into accountfactors such as the location of the device generating the print job, thetype of device generating the print job, attributes of the print job,and other factors. Some of these factors may be stored in the tables320.

Additionally, the data store 110-a may include one or more operatingsystem images 330. The operating system images 330 may be used, forexample, in the dynamic creation of print servers 145. As describedabove, certain drivers 305 may not be compatible with the standardoperating systems executed by typical print servers 145 in the system100. Accordingly, when a print job is indicated for a printer 150 usingone of these drivers 305, the central server computer system 105 mayretrieve a compatible operating system image 330 from the data store110-a and instantiate a new print server 145 by loading the operatingsystem image 330 onto a real or virtual machine. The newly instantiatedprint server 145 may then receive the print job from the central servercomputer system 105 and control the indicated printer 150 using theappropriate driver 305 to complete the print job.

Turning now to FIG. 4, a block diagram is shown of an illustrativebackend 120-a for use in a distributed printing system 100. The backend120-a shown in FIG. 3 may be an example of the backend 120 shown inFIG. 1. The backend 120-a may be configured to forward print data 405 toa next destination in the printing pipeline, such as a central servercomputer system 105, a print server 145, or a printer 150, as describedin more detail below. To accomplish this functionality, the backend 120may include a receiving module 410 to receive the print data 405 from anapplication session 115, a backend routing module 415 for determiningthe next destination of the print data 405, and a transmission module425 to transmit the print data 405 to the determined next destination.In some examples, the backend 120-a may also include a rasterizationmodule 420 for rasterizing the print data 405 prior to transmitting theprint data 405 to the central server computer system 105.

The receiving module 410 of the backend 120-a may be configured toreceive the print data 405 over a channel of communication with theapplication session 115. In some examples, the channel of communicationmay include one or more local connections (e.g., serial ports, parallelports, etc.) between the backend 120-a and a device implementing theapplication session 115. Additionally or alternatively, the channel ofcommunication may include one or more network connections (e.g.,Ethernet, WiFi, etc.) and/or logical connections (e.g., where thereceiving module 410 of the backend 120-a and the application session115 are implemented by the same physical machine).

In addition to receiving the print data 405, the receiving module 410may also identify the application session 115 providing the print data405. For example, the receiving module 410 may monitor a number of portsassociated with various application sessions 115. Each of theapplication sessions 115 may be assigned a terminal identifier or a nodeidentifier. Thus, when print data 405 is received, the receiving module410 may take note of the terminal identifier, the node identifier,and/or the port on which the print data is received to associate theprint data 405 with a known application session.

The backend routing module 415 may determine the next destination of theprint data 405 based on the application session 115 from which the printdata 405 was received. To this end, the destination identificationmodule 415 may maintain a table associating specific applicationsessions 115 with specific destinations. In certain examples, such as inthe system 100 of FIG. 1, all print data 405 received at the backend120-a, regardless of source, may be transmitted by the backend 120-a toa single central server computer system 105.

In alternative examples, the backend 120-a may be communicativelycoupled to a number of separate central server computer systems 105 suchthat print data 405 from different application sessions 115 istransmitted by the backend to different central server computer systems105. In additional or alternative examples, the backend 120-a may becommunicatively coupled to one or more central server computer systems105 in addition to one or more print servers 145 such that print data405 from some application sessions 115 is transmitted to a centralserver computer system 105 and print data 405 from other applicationsessions 115 is transmitted directly to a print server 145. In theseexamples, the backend routing module 415 may determine the nextdestination of each instance of print data 405 based on the applicationsession 115 from which the print data 405 was received.

In certain examples, the backend routing module 415 may further includelogic for dynamically determining in real-time how a print job is to berouted. For example, based on certain characteristics of the print data405, the backend routing module 415 may determine that it would be moreappropriate to forward the print data 405 to a central server computersystem 105 than to a print server 145 or printer 150. Additionally oralternatively, in examples where the backend 120-a is communicativelycoupled to multiple alternative central server computer systems 105, thebackend routing module 415 may perform load balancing in itsdistribution of different print jobs between the separate central servercomputer systems 105.

As mentioned above, in certain embodiments the backend 120-a may includea rasterization module 420. The rasterization module 420 may convert thereceived print data 405 into a raster image that can be understood by aprinter. In other embodiments, the print data 405 may already have beenrasterized by the application session 115 from which the print data 405was received. In still other embodiments, the print data 405 may berasterized at a print server 145 prior to printing.

The transmission module 425 of the backend 120-a may transmit thereceived print data 405 to the destination determined by the nextdestination identification module 415. This transmission may occur overone or more local connections (e.g., serial ports, parallel ports), oneor more network connections (e.g., Ethernet, WiFi), and/or one or morelogical connections (e.g., where the backend 120 and the nextdestination are implemented by the same physical machine).

FIG. 5 illustrates a diagram of one illustrative path 500 of print data405 through a distributed printing system. The print data 405 may firstbe generated and transmitted to a central server computer system 105-bby a session 125. The central server computer system 105-b may be anexample of the central server computer system 105 of FIG. 1 or FIG. 2.The session 125 may include an application executed by a host device. Incertain examples, a user of the application issues a command to printdata generated or hosted by the application.

In certain embodiments, the session 125 may transmit the print data 405directly to the central sever computer system 105-b. Alternatively, thesession 125 may utilize a backend 120 to transmit the print data 405 tothe central server computer system 105. The central server computersystem 105-b may perform session identification 510 to determine thesource of the print data 405. For example, the central server computersystem 105-b may look up a terminal identifier and/or a port associatedwith the print data 405 in a table to identify a device from which theprint data 405 originated.

Once the source of the print data 405 is known, the central servercomputer system 105-b may perform print routing 515 on the print data405 to select an appropriate printer 150-a for the print data 405. Theprinter 150-a may be an example of one of the printers 150 shown inFIG. 1. The print routing 515 may include applying a set of rules to oneor more parameters associated with the print data 405 and/or theidentified session 125. Additionally, the central server computer system105-b may retrieve 520 an appropriate driver 305-a for the identifiedprinter 150-a from a data store 110. The driver 305-a may betransmitted, together with the print data 405, from the central servercomputer system 105-b to a print server 145-a associated with theidentified printer 150-a. The print server 145-a may be an example ofthe print server 145 shown in FIG. 1. In certain examples, as describedabove, the print server 145-a may be dynamically instantiated inresponse to a particular printer 150-a being selected for the print data405.

The print server 145-a may install 530 the driver 305-a received fromthe central server computer system 105-b to enable the print server145-a to communicate with the selected printer 150-a. Additionally, theprint server may perform spooling 535 operations to receive and collectthe print data 405, scheduling 540 operations to schedule the print data405 for printing by the printer 150-a, and one or more conversion 545operations to transform the print data into a format understood by theprinter 150-a. In certain examples, the conversion 545 operations mayinclude rasterization of the print data 405. The print server 145-a maythen transmit the print data 405 to the selected printer 150-a over alocal connection, a network connection, and/or a logical connection forprinting.

It is worth noting that while an entire distributed printing system 100has been described as a whole for the sake of context, the presentspecification is directed to methods, systems, and apparatus that may beused with, but are not tied to the system 100 of FIGS. 1-5. Individualaspects of the present specification may be broken out and usedexclusive of other aspects of the foregoing description. This will bedescribed in more detail, below.

In one set of embodiments, systems, devices, methods, and software aredescribed for print routing. FIG. 6 illustrates an example of a system600 for print routing according to various embodiments of the invention.The system 600 includes a device 605, a print router 140-b, printservers 145, and printers 150. Each of these components may be incommunication with each other, directly or indirectly. This system 600may be an example of the system 100 described above with reference toFIG. 1 and/or the system 300 described above with reference to FIG. 3,and the print router 140-b may be a part of the central server computersystem 105 of FIG. 1 or 3.

A user of device 605 may select a printer 150 from a table or drop downmenu (or the printer may be selected automatically). The device 605 maytransmit print data 405-a for a print job. The print data 405-a mayinclude the image data for the print job and metadata. For example, themetadata associated with the print job may include, but is not limitedto, at least one of a type associated with the device 605, a networkidentifier (e.g., a port, network address, or name) associated with thedevice 605, the printer selection, a network identifier associated witha selected printer 150, a location associated with the device 605, alocation associated with a selected printer 150, or any other data thatmay suit a particular implementation of the principles described herein.

In other embodiments, the print data 405-a may come from sources otherthan the device 605. For example, a user of the device 605 may controlthe printing of data stored elsewhere, thereby controlling thegeneration of print data 405-a. The print data 405-a may otherwise belinked to a selected printer of a number of printers 150 in the system600. In one example, the print data 405-a may be directed to aparticular port number, and the port number may be associated with aselected printer 150. In examples, the print data 405-a may betransmitted from or to a particular port number associated with aselected printer 150. In other embodiments, the print data 405-a may beassociated with other types of addressing or identifiers to indicate aselected or default printer 150 (e.g., a network address for theprinter, or a location identifier to be used by a rules engine forprinter selection).

The print data 405-a may be transmitted through a backend (e.g., thebackend 120 of FIG. 1) or through a cloud computing environment to theprint router 140-b. Alternatively, the print data 405-a may betransmitted directly (or through a network) to the print router 140-b(e.g., in a windows environment). In one embodiment, the print router140-b may receive the print data 405-a including a port number or othernetwork identifier, and may identify the printer 150 to be used based onthe port number or other network identifier. In other embodiments, theprint router 140-b may process other received information included orassociated with the print data 405-a to identify the printer 150. Thus,the print router 140-b may receive information identifying a printer150, or may process a portion of the print data 405-a to identify theprinter 150.

With the information identifying the selected printer 150, the printrouter 140-b may identify a particular print server 145 and driver(s)associated with the selected printer 150 (e.g., if printer 150-b isselected, the print router 140-b may identify print server 145-b, anddrivers to be used for the print server 145-b and device 605). Thedrivers may be retrieved and distributed to the print server 145 (e.g.,by the print router 140-b or another server, such as the central servercomputer system 105 of FIG. 1 or 3), and the drivers may be installed.

The print router 140-b may transmit or otherwise provide the print data405-a to an identified print server 145. A print server 145 may processand format the print data, and transmit the processed data to a printer150 for printing.

In certain examples, the print server 145 may be a virtual print server,and thus both the print router 140-b and print server 145 may be part ofthe central server computer system 105 of FIG. 1, 2, or 5.

FIG. 7 illustrates another example of a system 700 for print routingaccording to various embodiments of the invention. The system 700includes a device 605-a, a print router 140-c, a data store 110-b, andprint servers 145-e and 145-f. Each of these components may be incommunication with each other, directly or indirectly. Data store 110-bincludes printer table 705, print server table 710, and driver table715. The data store 110-b may be an example of the data store 100, 110-adescribed with reference to FIG. 1 or 3. As such, the data store 110-bmay be a component of the print router 140-c and/or a central servercomputer system 105. This system 700 may be the system 100 describedwith reference to FIG. 1, and the print router 140-b may be a part ofthe central server computer system 105 of FIG. 1 or 5. This system 700may also be an example of the system 600 described with reference toFIG. 6.

Device 605-a may transmit print data 405-b for a print job to printrouter 140-c. The print data 405-b in this example includes metadata.The metadata may include, but is not limited to, at least one of: adevice 605-a type or identification, printer identifiers or links,network addresses, device and printer location, other types of networkidentifiers, or other data. The print data 405-b may includeidentification of (or include links to) a selected printer. In oneexample, the print data 405-b may be directed to or transmitted from aparticular port number, and the port number may be associated with aselected printer. In other embodiments, the print data 405-b may beassociated with other types of addressing or network identifiers toindicate a selected or default printer.

In this example, the data store 110-b includes a printer table 705,print server table 710, a driver table 715, and a mapping association720 that includes mappings between individual entries in the printertable 705, the print server table 710, and the driver table 715. Theprinter table 705 may include identifiers for multiple printers (e.g.,printer 150 of FIG. 1, 5, or 6) in the system 700. Similarly, the printserver table 710 may include identifiers for multiple print servers(e.g., print servers 145 of FIG. 1, 5, or 6), and the driver table 715may include identifiers for multiple drivers (e.g., drivers 305 of FIG.3 or 5) used by the system.

The mapping association 720 may store associations between identifiersof the printer table 705, the print server table 710, and the drivertable 715. In certain examples, for each printer in printer table 705,there may be an association with one (or more) print servers 145 listedin print server table 710. For each printer 150, there may be ahierarchy or varied favorability for different print servers 145. Also,for each printer 150 in printer table 705, there may be an associationwith one (or more) print drivers (e.g., drivers 305 of FIG. 3) fromdriver table 715. The driver table 715 may have drivers 305 for thedevice 605-a and for print servers 145. For each printer, there may be ahierarchy or varied favorability for different print drivers. Thus, theprint router 140-c may receive an identification of a printer 150, andassociate a print server 145 and drivers with the identified printer 145based on links between tables 605, 610, and 615. The print router 140-bor other components of system 700 may distribute the drivers and forwardthe print data 405-b accordingly.

FIGS. 8A, 8B, 8C, 8D, and 8E show examples of tables that may be storedby a data store 110-b to track the association between identifiers in aprinter table 705, a print server table 710, and a driver table 715. Thetables of FIGS. 8A and 8B may be stored, for example in the data store110-b of FIG. 7.

In the table shown in FIG. 8A, there are columns for printers, printservers, and drivers, respectively. For each printer identifier in thetable, there is an associated print server identifier and a driveridentifier. For example, as shown in FIG. 8A, printer C is associatedwith print server 2 and with driver C₁. Thus, where printer C isidentified for a print job, the print job may be mapped to print server2 based on the association in the table between the identifier “C” inthe printer column with the identifier “2” in the print server column.Similarly, the driver C₁ may be mapped to print server 2 based on theassociation in the table between the identifier “C₁” in the drivercolumn and the identifier “2” in the print server column. In this way,the print job may be sent to print server 2, which may cause printer Cto print the job using driver C₁.

As shown in the table of FIG. 8B, additional identifiers, such as alocation identifier and a print job type identifier, may also factorinto the association of a printer 150 with a print server 145 and adriver 305.

As printers 150 with redundant capabilities may be situated at differentlocations, separate print jobs of the same type may be sent to differentprinters 150 based on a location from which each print job originates ora desired printing location for each print job. Thus, in the presentexample, print jobs of type 1 may be associated with printer A forlocation I, with printer D for location II, and with printer E forlocations III and IV.

Additionally, different types of jobs within the same or differentregions may be associated with different printers 150. To illustratethis point, consider the example of a medical facility where printer Ais a general purpose black and white printer, printer B is a color inkjet printer, and printer C is a special-purpose printer of patientidentification bracelets. In location I, black and white print jobs(e.g., type 1) may be associated with printer A, color print jobs (e.g.,type 2) may be associated with printer B, and patient bracelet printjobs (e.g., type 3) may be associated with printer C.

Furthermore, different types of print jobs may be sent to the sameprinter 150 using different drivers. Thus, as shown in FIG. 8B, a printjob of type 1 sent to printer D by print server 2 may use driver D₁,whereas a print job of type 2 sent to printer D by the same print servermay use driver D₂. By way of illustration, consider the example of amedical facility in which a multi-purpose printer may be configured toprint both patient identification bracelets and identification cards.With this type of printer, it may be desirable to have two lightweightjob-specific drivers in a system with centralized driver distributionrather than a single large driver. As such, an identificationcard-specific driver (e.g., driver D₁) may be mapped to the print server(e.g., print server 2) for an identification card print job (e.g., aprint job of type 1), and a bracelet-specific driver (e.g., driver D₂)may be mapped to the print server (e.g., print server 2) for a braceletprint job (e.g., a print job of type 2).

In certain examples, static data from separate tables may be logicallycombined into inferred tables for print routing. To illustrate thispoint, consider the tables shown in 8C, 8D, and 8E.

The table of FIG. 8C tracks a known association between a terminal IDand port number for received data with a session and a location of adevice implementing the session. Thus, if print data for a print job isreceived at port 9100 from terminal ID L184001, it can be determined inthis example that the print data is from session M at location 2 basedon the table. Similarly, if print data for a print job is received atport 9101 from a session, it can be determined in this example that theprint data is from session N at location 3 based on the table.

The table of FIG. 8D tracks a default printer for different sessions atdifferent locations. Thus, in the present example, if print data isreceived from session M at location 2, the default printer for thatprint data is printer A according to the table. Similarly, if print datais received from session N at location 3, the default printer for thatprint data is printer B according to the table.

The table of FIG. 8E combines the data from the tables of FIG. 8C andFIG. 8D to create inferred associations between ports and printers. Ifeach session of the present example transmits print data at a differentport, it can be inferred from the tables of FIG. 8C and FIG. 8D thatprint data received at port 9100 should be directed to printer A andthat print data received at port 9101 should be directed to printer B,absent any indication to the contrary received in connection with theprint data.

FIG. 9 illustrates one example of a print router 140-d consistent withthe foregoing principles. The print router 140-d may include a printerselection identification module 905, a print server mapping module 910,and a driver mapping module 915. Each of these components may be incommunication, directly or indirectly. The print router 140-d may be anexample of the print router 140 described with reference to FIG. 1, 2,6, or 7.

The printer selection identification module 905 may include logic foridentifying a printer (e.g., printer 150 of FIG. 1, 5, or 6) selectedfor a particular print job. In certain examples, the printer 150 may beselected in connection with the generation of print data for the printjob. For instance, a user of a device (e.g., device 605 of FIG. 6 or 7)may be prompted to select a printer 150 when generating a print job atthe device. The user selection may be transmitted to the print router140-d and identified at the printer selection identification module 905.

Additionally or alternatively, the printer selection identificationmodule 905 may identify the selection of a printer 150 by receivingmetadata associated with the print data, where the metadata specifiesthe printer 150 selected for the print job. In this example, the printerselection identification module 905 may simply read the metadata toidentify the printer selection.

In other examples, the printer selection identification module 905 mayidentify the printer selection by inference. In certain embodiments, theprinter selection identification module 905 may identify the printerselected for the print job by receiving a network identifier (e.g., anetwork address or a port number) associated with the print job anddetermining that the network identifier is associated with the printer.

In additional or alternative examples, the printer selectionidentification module 905 may receive a location identifier associatedwith the print job. The location identifier may identify a location ofthe device generating the print job and/or a desired printing location.The printer selection identification module 905 may then identify theselected printer based on a stored association between the locationidentifier and the selected printer.

In certain examples, the printer selection identification module 905 mayidentify the printer 150 selected for the print job using a combinationof direct and inferential identification techniques. For example,metadata associated with the print job may specify a certain type ofprinter. The type of the printer, in combination with the identificationof the port at which the print job is received, may identify the printerselection.

The print server mapping module 910 may include logic for mapping theselected printer 150, as identified by the printer selectionidentification module 910, to a specific print server 145. In certainexamples, the print server mapping module 910 may map the selectedprinter 150 to the print server 145 by accessing a data store (e.g.,data store 110 of FIG. 1, 3, or 7). The data store 110 may store amapping association 720 that associates the selected printer 150 with aprint server 145. For example, the print server mapping module 910 maycommunicate with the data store 110 to search one or more tables orother data structures in the data store 110 for an identifier of theselected printer 150. The identifier of the selected printer 150 may beassociated in the data store 110 with an identifier for the print server145. In other examples, the data store 110 may be more intelligent, andthe print server mapping module 910 may simply query the data store 110with an identifier for the printer 150 to obtain an identifier for theprint server 145.

The driver mapping module 915 may include logic for mapping a driver(e.g., from drivers 305 of FIG. 3) to the print server 145. The driver305 may be a custom driver created specifically for the selected printer150 or for a certain printer type. As such, mapping the driver to theprint server 145 may include determining that the selected printer 150is of a certain type and determining that a driver 305 is associatedwith that type of printer. Additionally or alternatively, the driver 305may be a generic driver 305 that is operable to control multiple typesof printers. In still other examples, the driver 305 may be a driver 305specific to the print server 145 or an operating system of the printserver 145.

In certain examples, the driver mapping module 915 may communicate withdata store 110 to determine that the driver 305 is associated with theselected printer 150. For example, the driver mapping module 915 maysearch or query the data store 110 to identify a driver matching theprinter 150. In some examples, the driver mapping module 915 maydetermine that the selected printer 150 is of a certain type (e.g.,vendor, model, feature set) and search or query the data store 110 fordrivers 305 matching that type to identify an appropriate driver 305 tomap to the print server 145. Mapping a driver 305 to the print server145 may further include searching or querying the data store 110 todetermine that an appropriate driver 305 for the print server 145individually, for a type associated with the print server 145, and/orfor an operating system of the print server 145.

Once the printer selection identification module 905 has identified theprinter 150 selected for the print job, the print server mapping module910 has mapped the printer 150 to a print server 145, and the drivermapping module 915 has mapped an appropriate driver 305 to the printserver 145, the print server 145 may transmit the print job to theselected printer 150 using the driver 305.

FIG. 10 illustrates one example of central server computer system 105-cthat may be used in a distributed printing system 100, such as thesystems 100, 600, 700 of FIG. 1, 6, or 7. The central server computersystem 105-c may be an example of the central server computer systems105 of FIG. 1, 2, or 5.

The central server computer system 105-c may include a rules engine 130,a session manager 135, a print router 140-e, and a print server manager205-a. Each of these components may be in communication, directly orindirectly. The rules engine 130 and the session manager 135 mayfunction substantially as described above in FIG. 2.

The print router 140-e may be an example of the print router 140-ddescribed with reference to FIG. 1, 2, 6, 7, or 9. The print router140-d may include a printer selection identification module 905, a printserver mapping module 910, and a driver mapping module 915 that performsubstantially the same functionality as described above with referenceto FIG. 9. Additionally, the print router 140-e may include a print jobreceiving module 1005, a metadata interpretation module 1010, a printjob transmission module 1015, and a driver notification module 1020.

The print job receiving module 1005 may be configured to communicatewith a device (e.g., device 605 of FIG. 6) generating print data for aprint job to receive the print data. The print data may include theactual data to be printed in addition to metadata. The metadata mayinclude data not for printing that is associated with the print job toconvey certain attributes of the print job. For example, the metadatamay include direct or indirect information indicating a printerselection for the print job. The metadata interpretation module 1010 mayreceive and parse the metadata, passing information relevant to theprinter selection to the printer selection identification module 905.

The print job transmission module 1015 of the print router 140-e mayforward some or all of the print data received at the print jobreceiving module 1005 to the print server (e.g., print server 145 ofFIG. 1, 5, 6, or 7) mapped to the selected printer (e.g., printer 150 ofFIG. 1, 5, 6, or 7) by the print server mapping module 910. Depending onthe nature of communication between the central server computer system105-c and the print server 145, the print data may be forwarded to theprint server 145 over one or more local connections, networkconnections, logical connections, and/or combinations thereof.

The print server manager 205-a may be configured to coordinate theinstallation and use of drivers 305 by specific print servers 145. Theprint server manager 205-a may include a driver notification module1025, a driver deployment analysis module 1030, and a driver deploymentmodule 1035.

The driver notification module 1025 may include logic for notifying aprint server 145 of the identity of the driver 305 mapped to the printserver 145 for the print job. For example, the driver notificationmodule 1025 may receive an identifier of the driver 305 from the drivermapping module 915 and forward the identifier to the print server 145.Upon receiving the identifier of the driver 305, the print server 145may know to use that driver 305 for the print job.

The driver deployment analysis module may include an installationdetection submodule 1040 and an update analysis submodule 1045. Incertain examples, drivers 305 for print jobs may be centrallydistributed to print servers 145 from the central server computer system105-c on a per-print job basis, an as-needed basis, and/or anotherbasis.

As such, when a driver 305 has been mapped to the print server 145 foruse with a printer 150 selected for a print job, the installationdetection submodule 1040 may communicate with the print server 145 todetermine whether the print server 145 already has that driver 305installed. Where the print server 145 has a version of the driver 305installed that is different from the version stored by the centralserver computer system 105-c, the update analysis submodule 1045 maydetermine whether an update to the driver installed on the print server145 is merited. If the print server 145 does not have the driver 305installed or has an incorrect version of the driver 305 installed, thedriver deployment module 1035 may communicate with the print server 145to write the correct version of the driver 305 into the local storage ofthe print server 145.

Alternatively, the print server 145 may manage driver installation onits own. For example, the print server 145 may receive notification fromthe driver notification module 1025 that a certain driver 305 has beenmapped to the print server 145 for use with a selected printer 150 on aprint job. In response to the notification, the print server 145 maysearch its local storage to determine whether that driver 305 is alreadyinstalled on the print server 145. If the print server 145 does not havethe driver installed, or if an incorrect or out-of-date version of thedriver is installed, the print server 145 may request the driver fromthe central server computer system 105-c or another source.

FIG. 11 illustrates one example of a method 1100 of centralized printdistribution in a distributed printing environment. The method 1100 ofFIG. 11 may be performed, for example, by the print router 140 of FIG.1, 2, 5, 6, 7, 9, or 10 and/or by the central server computer system 105of FIG. 1, 2, 5, 7, or 10. At block 1105, a printer selected for a printjob is determined. In certain examples, the selected printer may bedetermined based on a selection made by a user of a device generatingthe print job, a location identifier associated with the print job,metadata received with the print job, and/or other data conveying orinferring a printer selection.

At block 1110, the selected printer is mapped to a print server incommunication with the selected printer. In certain examples, mappingthe selected printer to the print server may include consulting a datastore to determine that an identifier stored for the selected printer ina table of printer identifiers is associated with an identifier storedfor the print server in a table of print server identifiers.

At block 1115, a driver associated with the selected printer is mappedto the print server. The mapping of the selected printer to the printserver may also include communicating with a centralized data store todetermine that an identifier stored for the selected printer in a tableof printer identifiers is associated with an identifier stored for thedriver in a table of print drivers. The mapping of the selected printerto the print server may additionally or alternatively includedetermining that the selected printer is of a specified type anddetermining that the driver is associated with the specified type of theselected printer.

FIG. 12 illustrates another example of a method 1200 of centralizedprint job routing in a distributed printing environment. The method 1200of FIG. 12 may be performed, for example, by the print router 140 ofFIG. 1, 2, 5, 6, 7, 9, or 10 and/or by the central server computersystem 105 of FIG. 1, 2, 5, 7, or 10.

At block 1205 a printer selected for a print job is determined based ona network identifier associated with the print job. The networkidentifier may include, for example, a source port, a destination port,a source address, and/or a destination address. At block 1210, theselected printer is mapped to a print server in communication with theselected printer. At block 1215, a driver associated with the selectedprinter is mapped to the print server. At block 1220, communication withthe print server occurs to notify the print server of the driver mappedto the print server. In certain examples, the print server may installthe driver in response to receiving the notification.

FIG. 13 illustrates another example of a method 1300 of centralizedprint job routing in a distributed printing environment. The method 1300of FIG. 13 may be performed, for example, by the print router 140 ofFIG. 1, 2, 5, 6, 7, 9, or 10 and/or by the central server computersystem 105 of FIG. 1, 2, 5, 7, or 10.

At block 1305, multiple drivers are stored at a centralized data store.At block 1310, a print job is received over a network. At block 1315, aprinter selected for the print job is determined. At block 1320, theselected printer is mapped to a print server in communication with theselected printer. At block 1325, a driver from the centralized datastore is mapped to the print server. At block 1330, the print job istransmitted over the network to the print server.

The functionality of the central server computer system 105 of 1, 2, 5,7, or 10, the print router 140 of FIG. 1, 2, 5, 6, 7, 9, or 10, thebackend 120 of FIG. 1 or 4, the print server 145 of FIG. 1, 5, 6, or 7,or the device 605 of FIG. 6 or 7, may, individually or collectively, beimplemented with one or more Application Specific Integrated Circuits(ASICs) adapted to perform some or all of the applicable functions inhardware. Alternatively, the functions may be performed by one or moreother processing units (or cores), on one or more integrated circuits.In other embodiments, other types of integrated circuits may be used(e.g., Structured/Platform ASICs, Field Programmable Gate Arrays(FPGAs), and other Semi-Custom ICs), which may be programmed in anymanner known in the art. The functions of each unit may also beimplemented, in whole or in part, with instructions embodied in amemory, formatted to be executed by one or more general orapplication-specific processors.

A device structure 1400 that may be used for one or more components ofthe central server computer system 105 of 1, 2, 5, 7, or 10, the printrouter 140 of FIG. 1, 2, 5, 6, 7, 9, or 10, the backend 120 of FIG. 1 or4, the print server 145 of FIG. 1, 5, 6, or 7, or the device 605 of FIG.6 or 7, or for other computing devices or printers described herein, isillustrated with the schematic diagram of FIG. 14.

This drawing broadly illustrates how individual system elements of eachof the aforementioned devices may be implemented, whether in a separatedor more integrated manner. Thus, any or all of the various components ofone of the aforementioned devices may be combined in a single unit orseparately maintained and can further be distributed in multiplegroupings or physical units or across multiple locations. The examplestructure shown is made up of hardware elements that are electricallycoupled via bus 1405, including processor(s) 1410 (which may furthercomprise a digital signal processor (DSP) or special-purpose processor),storage device(s) 1415, input device(s) 1420, and output device(s) 1425.The storage device(s) 1415 may be a machine-readable storage mediareader connected to any machine-readable storage medium, the combinationcomprehensively representing remote, local, fixed, or removable storagedevices or storage media for temporarily or more permanently containingcomputer-readable information. The communications system(s) interface1445 may interface to a wired, wireless, or other type of interfacingconnection that permits data to be exchanged with other devices. Thecommunications system(s) interface 1445 may permit data to be exchangedwith a network.

The structure 1400 may also include additional software elements, shownas being currently located within working memory 1430, including anoperating system 1435 and other code 1440, such as programs orapplications designed to implement methods of the invention. It will beapparent to those skilled in the art that substantial variations may beused in accordance with specific requirements. For example, customizedhardware might also be used, or particular elements might be implementedin hardware, software (including portable software, such as applets), orboth.

It should be noted that the methods, systems and devices discussed aboveare intended merely to be examples. It must be stressed that variousembodiments may omit, substitute, or add various procedures orcomponents as appropriate. For instance, it should be appreciated that,in alternative embodiments, the methods may be performed in an orderdifferent from that described, and that various steps may be added,omitted or combined. Also, features described with respect to certainembodiments may be combined in various other embodiments. Differentaspects and elements of the embodiments may be combined in a similarmanner. Also, it should be emphasized that technology evolves and, thus,many of the elements are exemplary in nature and should not beinterpreted to limit the scope of the invention.

Specific details are given in the description to provide a thoroughunderstanding of the embodiments. However, it will be understood by oneof ordinary skill in the art that the embodiments may be practicedwithout these specific details. For example, well-known circuits,processes, algorithms, structures, and techniques have been shownwithout unnecessary detail in order to avoid obscuring the embodiments.

Also, it is noted that the embodiments may be described as a processwhich is depicted as a flow diagram or block diagram. Although each maydescribe the operations as a sequential process, many of the operationscan be performed in parallel or concurrently. In addition, the order ofthe operations may be rearranged. A process may have additional stepsnot included in the figure.

Moreover, as disclosed herein, the term “memory” or “memory unit” mayrepresent one or more devices for storing data, including read-onlymemory (ROM), random access memory (RAM), magnetic RAM, core memory,magnetic disk storage mediums, optical storage mediums, flash memorydevices or other computer-readable mediums for storing information. Theterm “computer-readable medium” includes, but is not limited to,portable or fixed storage devices, optical storage devices, wirelesschannels, a sim card, other smart cards, and various other mediumscapable of storing, containing or carrying instructions or data.

Furthermore, embodiments may be implemented by hardware, software,firmware, middleware, microcode, hardware description languages, or anycombination thereof. When implemented in software, firmware, middlewareor microcode, the program code or code segments to perform the necessarytasks may be stored in a computer-readable medium such as a storagemedium. Processors may perform the necessary tasks.

Having described several embodiments, it will be recognized by those ofskill in the art that various modifications, alternative constructions,and equivalents may be used without departing from the spirit of theinvention. For example, the above elements may merely be a component ofa larger system, wherein other rules may take precedence over orotherwise modify the application of the invention. Also, a number ofsteps may be undertaken before, during, or after the above elements areconsidered. Accordingly, the above description should not be taken aslimiting the scope of the invention.

1. A distributed printing system, comprising: a plurality of printservers; a data store comprising: a first table comprising identifiersfor a plurality of printers; a second table comprising identifiers for aplurality of print servers; a third table comprising identifiers for aplurality of drivers; and an association between identifiers of thefirst, second, and third tables; and a print router configured to:determine a printer selected for a print job; map, according to theassociation between a first identifier from the first table for theselected printer and a second identifier from the second table for aselected print server of the plurality of print servers, the secondidentifier for the print server of the plurality of print servers to theselected printer; and map, according to the association between thefirst identifier of the first table and a third identifier of the thirdtable for a driver of the plurality of drivers, the third identifier fora driver of the plurality of drivers to the print server.
 2. Thedistributed printing system of claim 1, wherein the print router isfurther configured to: communicate with the print server to notify theprint server of the driver mapped to the print server.
 3. Thedistributed printing system of claim 1, wherein the print router isfurther configured to: communicate with the print server to notify theprint server of the driver mapped to the print server
 4. The distributedprinting system of claim 1, wherein the print router is furtherconfigured to determine the printer selected for the print job by:receiving a location identifier associated with the print job; anddetermining that the location identifier is associated with the printer.5. The distributed printing system of claim 1, wherein the print routeris further configured to: determine the printer selected for the printjob from metadata associated with the print job.
 6. The distributedprinting system of claim 1, wherein, the print router comprises the datastore; and the identified printer selected for a print job comprises anidentifier for the identified printer.
 7. A method of centralized printjob routing in a distributed printing environment, comprising:determining a printer selected for a print job; mapping the selectedprinter to a print server in communication with the selected printer;and mapping a driver associated with the selected printer to the printserver.
 8. The method of claim 7, wherein: the determining the printercomprises determining a printer identifier for the selected printer; themapping the selected printer to the print server comprises mapping theprinter identifier to a print server identifier of a plurality of printserver identifiers according to an association between the printeridentifier and the print server identifier; and the mapping the drivercomprises mapping the printer identifier to a driver identifier of aplurality of driver identifiers according to an association between theprinter identifier and the driver identifier.
 9. The method of claim 7,wherein determining the printer selected for the print job comprises:receiving a location identifier associated with the print job; anddetermining that the location identifier is associated with the printer.10. The method of claim 7, wherein determining the printer selected forthe print job comprises: receiving metadata associated with the printjob; and identifying the printer from the metadata.
 11. The method ofclaim 7, wherein determining the printer selected for the print jobcomprises: receiving a printer selection from a user of a devicegenerating the print job.
 12. The method of claim 7, further comprising:storing an association between the selected printer and the print serverat a centralized data store, wherein mapping the selected printer to theprint server comprises communicating with the data store to determinethat the selected printer is associated with the print server.
 13. Themethod of claim 7, further comprising: storing an association betweenthe selected printer and the driver at a centralized data store, whereinmapping the driver to the print server comprises communicating with thedata store to determine that the selected printer is associated with thedriver.
 14. The method of claim 7, wherein mapping the driver to theprint server comprises: determining that the selected printer is of aspecified type; and determining that the driver is associated with thespecified type of the selected printer.
 15. The method of claim 7,further comprising: communicating with the print server to notify theprint server of the driver mapped to the print server.
 16. The method ofclaim 7, further comprising: determining whether the driver mapped tothe print server is currently installed on the print server.
 17. Themethod of claim 7, further comprising: communicating with the printserver to transmit the driver on the print server in response todetermining that the driver mapped to the print server is not currentlyinstalled on the print server.
 18. The method of claim 7, furthercomprising: receiving the print job; and transmitting the print job tothe print server.
 19. A method of printing in a distributed printingenvironment, comprising: storing a plurality of drivers in a centralizeddata store; receiving a print job over a network; identifying a printerselected for the print job; mapping the selected printer to a printserver in communication with the printer; mapping a driver in thecentralized data store to the print server; and transmitting the printjob to the print server over the network.
 20. The method of claim 19,wherein identifying the printer selected for the print job comprises:receiving a network identifier associated with the print job; anddetermining that the network identifier is associated with the printer.